import math

'''
def main():
    c = Cluster(7, 1, 10)
    m=Module([c])
    ev = Eval()
    eval_sol([m])
'''


#Evaluar que los ramos de primer semestre no se hagan en un mismo dia. Asumimos 7 modulos diarios. Revisar que recibe carreras, ojala sean clusters!
def eval_primeros(carreras):
    for c in carreras:
        sem=c.semestres[0]
        R=len(sem.ramos)    
        for i in xrange(R):
            for j in xrange(R):
                if abs(sem.ramos[i].modulo.pos-sem.ramos[j].modulo.pos)<7:
                    return False
    return True       

def evaluar(carreras):	#Asume que los ramos ya tienen modulos asignados!
    a=1 #Estos son los pesos que se usan en la FO del modelo
    b=1
    c=1
    ret=0

    #Evaluar segundo curso del semestre-carrera en horario j o j+1
    for c in carreras:
        for s in carreras.semestres:
            aux=0
            mods=range(0,35) #Asumo que son 35 modulos
            for r in carreras.semestres.ramos:
                mods[r.modulo]+=1
            for i in mods:	#Esto castiga si hay un ramo del mismo semestre en un horario contiguo
                if not i==0:
                    if aux ==0:
                        aux=1
                    else: 
                        ret+=a
			
        #Ahora hay que ver que los de primer semestre no esten en dias contiguos
        sem = c.semestre[0]
        for r1 in sem.ramos:
            for r2 in sem.ramos:
                if 7<=abs(r1.modulo-r2.modulo)<=14:
                    ret+=b
				
        #Aca mismo veo lo de semestres contiguos
        for s in xrange(0,len(carrera.semestres)-1):
            for r1 in carrera.semestres[s]:
                for r2 in carrera.semestres[s+1]:
                    if r1.modulo==r2.modulo:
                        ret+=c
    return ret
